<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN" xml:lang="zh_CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../rurple.css" type="text/css" />

<title>不是真的!?</title>
</head>
<body>
<h2 class="title">15. <span class="pykeyword">不是</span>真的!?</h2>

<p>假设我们希望乐跑持续前进直到它遇到一个报警器然后停下来并关机。 乐跑的开始位置如下所示：</p>

<p><img alt="stop at beeper" src="../../images/intro/stop_at_beeper.png" /></p>

<p>要这样做的话，在 <i>虚拟码</i>中-可以如下面所显示来做:</p>

<pre>
假如在报警器上,
... 停止; 
否则,
...保持前进。
</pre>

<p>用迄今为止我们已经学习的命令，我们可以将以上的行动翻译为：</p>

<pre>
<span class="keyword">if</span> on_beeper():
    turn_off()
<span class="keyword">else</span>:
    move()           
</pre>

<p>这些命令只是解决了问题的一部分，因为我们并没有告诉乐跑要保持重复地做同样的动作。（我们暂时忽视这个问题）。 现在，考虑相同的<i>虚拟码</i> 规则:</p>

<pre>
如果不在报警器上，
...保持前进;
否则,
...停止.
</pre> 

<p>当我们翻转了命令 "保持前进" 和 "停止"，你觉得这两种方法应该是是相等的。关键点在于，在第二个例子中，我们在 <span class="pykeyword">if</span>后面用了<span class="pykeyword">not</span>。换句话来说，Python也允许我们否定一些命令，if not的意思是假如不是，现在一起来看下面的命令：</p>

<pre>
<span class="keyword">if not</span> on_beeper():
    move()
<span class="keyword">else</span>:
    turn_off()          
</pre>

<p>现在，大家一起来用迄今我们所学的知识把这些命令翻译成完整的程序, 我们可能需要 <span class="pykeyword">定义</span>一个命令, 然后使得它重复行动足够多次以确保乐跑能够完成任务。</p>

<h3 class="try">轮到你了</h3>

<p>使用新的Python关键词 <span class="pykeyword">not</span>，重写一遍你的跨栏程序。</p>

<!--=============================================-->
<hr class="line" />

<h3 class="suggested">小实验：除草和播种时刻</h3>

<p>春天到了。 乐跑的爸爸在花园里播种了。有些地方两个种子都发芽了，但是有些地方，一个也没有。如下显示了一个典型情况 (看文件: harvest4.wld).</p>

<p><img alt="weeding" src="../../images/intro/harvest4.png" /></p>

<p>现在大家一起来帮助乐跑给花园除草，使得没有一个地方有两个胡萝卜（这里我们用报警器来表示），而在没有胡萝卜的地方重新播种，目的是要让每个地方都有一个胡萝卜，如下图所示：</p>

<p><img alt="weeding" src="../../images/intro/harvest1.png" /></p>

<p>对于部分程序，这里有个 <i>建议</i>：</p>

<pre>
<span class="comment">#根据问题引进一个库、</span>
next_to_a_carrot = on_beeper
plant_carrot = put_beeper
pick_carrot = pick_beeper

<span class="keyword">def</span> one_carrot_only():
    <span class="keyword">if not</span> next_to_a_carrot():
        plant_carrot()      <span class=
"comment"># 丢失种子的地方重新播种</span>
    <span class="keyword">else</span>:
        pick_carrot()
        <span class="keyword">if not</span> next_to_a_carrot(): <span class="comment"># oops!</span>
            plant_carrot()  <span class="comment">#我们已经移掉了唯一的一个</span>
</pre>

<p>注意，事实上，移除种子重新播种并 <b>不是</b> 一个好主意！</p>

<div class="lessons_nav">
<a href="14-elif.htm"><img alt="previous" src=
"../../images/previous.png" /> 假如，否则，假如，否则....</a> - <a href=
"../lessons_toc.htm"><img alt="home" src="../../images/home.png" /></a> - <a href=
"16-while.htm">暂时 <img alt="next" src=
"../../images/next.png" /></a>
</div>
</body>
</html>
